package main

import (
	"flag"
	"fmt"
	"lancer/client"
	"lancer/common"
	"lancer/conf"
	"lancer/enum"
	"lancer/worker"
	"log"
	"time"
)

var (
	confFile string
)

func initArgs() {
	flag.StringVar(&confFile, "config", "./conf/config.json", "指定config.json文件")
	flag.Parse()
}

func main() {
	var (
		err    error
		output string
		n      int
	)

	log.Println("ai pbx dev start...")

	//初始化命令行
	initArgs()

	//读取配置文件
	if err = conf.InitConfig(confFile); err != nil {
		log.Println("加载配置文件错误:", err)
		panic(err)
	}

	//初始化执行器
	if err = worker.InitExecutor(); err != nil {
		log.Println("执行器错误:", err)
		panic(err)
	}

	inputStr := "ai pbx dev"
	//等待用户确认再往下执行
	common.Ask(inputStr)

	//本地打包
	log.Println("本地打包")
	output = worker.GExecutor.ExecuteJob("cd /Users/wensiyao/code/go/world/ai/workspace/ai-pbx && make linux")
	log.Println(output)

	//连接ssh
	if err = client.InitSsh(); err != nil {
		log.Println("ssh服务器错误:", err)
		panic(err)
	}
	log.Println(output)

	//删除原来的包 测试服上使用
	log.Println("删除服务器包")
	if output, err = client.GSshClientHandle.Run("rm -rf /home/xy_info/aicall/ai-pbx-linux64"); err != nil {
		log.Println("ssh服务器删除文件错误:", err)
		panic(err)
	}
	log.Println(output)

	//查找文件是否存在 生产服上使用
	//log.Println("查找文件是否存在")
	//if output, err = client.GSshClientHandle.Run("find /home/xy_info/aicall  -name ai-pbx-linux64"); err != nil {
	//	log.Println("ssh服务器删除文件错误:", err)
	//	panic(err)
	//}
	//log.Println("查找的文件名：", output)
	//
	//allFileName := "/home/xy_info/aicall/ai-pbx-linux64"
	//if output == (allFileName + "\n") {
	//	log.Println("文件存在")
	//
	//	//存在则执行mv命令
	//	log.Println("执行mv备份命令")
	//	backupName := "/home/xy_info/aicall/backup-bin/ai-pbx-linux64-" + time.Now().Format("2006-01-02-15-04-05")
	//	if output, err = client.GSshClientHandle.Run("mv " + allFileName + " " + backupName); err != nil {
	//		log.Println("ssh服务器mv文件错误:", err)
	//		panic(err)
	//	}
	//}

	//上传包
	log.Println("上传本地包到服务器")
	if n, err = client.GSshClientHandle.UploadFile("/Users/wensiyao/code/go/world/ai/workspace/ai-pbx/bin/ai-pbx-linux64", "/home/xy_info/aicall/ai-pbx-linux64"); err != nil {
		panic(err)
	}
	fmt.Println(n)

	//chmod 755 包 权限
	log.Println("给包赋值755权限")
	if output, err = client.GSshClientHandle.Run("chmod 755 /home/xy_info/aicall/ai-pbx-linux64"); err != nil {
		log.Println("ssh服务器chmod 755错误:", err)
		panic(err)
	}

	//ps -ef | grep 查看进程
	log.Println("执行进程id查找...")
	if output, err = client.GSshClientHandle.Run("ps -elf | grep ai-pbx-linux64 | grep -v grep | head -n 1|awk '{print $4}'"); err != nil {
		log.Println("ssh服务器ps -ef错误:", err)
		panic(err)
	}

	if output != "" {
		//kill -9 进程
		log.Println("执行：kill - 9 " + output)
		if output, err = client.GSshClientHandle.Run("kill -9 " + output); err != nil {
			log.Println("ssh服务器kill -9 错误:", err)
			panic(err)
		}
		log.Println(output)
	}

	//启动进程
	log.Println("启动进程脚本")
	date := time.Now().Format("2006-01-02")
	go client.GSshClientHandle.Run("cd /home/xy_info/aicall && /bin/bash ./start-run.sh > auto-pbx-" + date + ".log 2>&1")

	time.Sleep(enum.CronSleepTime * time.Second)
	log.Println(output)

	log.Println("ai pbx dev finish")
}
